package com.example.fengyungo.service;

import com.example.fengyungo.domain.entity.Order;
import com.example.fengyungo.domain.vo.OrderDetailsVO;
import com.example.fengyungo.result.Result;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import java.util.List;

public interface OrderService {

    /**
     * 获取可接订单
     *
     * @return List
     */
    Result<List<OrderDetailsVO>> getAccessOrder();

    /**
     * 查询司机接的订单
     *
     * @param receiverId String 接单者id，即司机的id
     * @return List<Order>
     */
    Result<List<OrderDetailsVO>> getOrdersByDriver(String receiverId);

    /**
     * 根据位置查询司机可接订单
     *
     * @param place String 起点或终点
     * @return List<Order>
     */
    List<Order> getOrdersByPlace(String place);

    /**
     * 根据订单编号更新接单者id与订单状态
     *
     * @param receiverId 接单者id
     * @param number     订单编号
     * @return Boolean
     */
    Boolean updateReceiverIdAndOrderStatusByNumber(String receiverId, String number);

    /**
     * 添加订单
     *
     * @param order 订单
     * @return Boolean
     */
    Boolean addOrder(Order order);

    /**
     * 根据用户id查询订单
     *
     * @param userId 用户id
     * @return List<Order>
     */
    Result<List<OrderDetailsVO>> getOrdersByUserId(String userId);

    /**
     * 根据订单编号更新订单
     *
     * @param order 订单
     * @return Integer
     */
    Integer updateOrderByNumber(Order order);

    /**
     * 根据起点或终点查询司机可接的订单
     *
     * @param begin 起点
     * @param end   终点
     * @return List<Order>
     */
    List<OrderDetailsVO> getOrdersByPosition(String begin, String end);

    /**
     * 根据订单编号更新订单的评分
     *
     * @param number 订单编号
     * @param credit 评分
     * @return Integer
     */
    Integer updateCredit(String number, float credit);

    /**
     * 根据条件查询订单
     *
     * @param order 订单
     * @return List<Order>
     */
    List<OrderDetailsVO> getOrderByCondition(Order order);
}
